Messenger বা Mediator Pattern এর ধারণা

Microsoft Technologies - এমভিভিএম (MVVM) MVVM এবং Messaging System |
190
190

Messenger বা Mediator Pattern একটি Behavioral Design Pattern যা objects বা components এর মধ্যে সরাসরি যোগাযোগের পরিবর্তে একটি মধ্যস্থতাকারী (Mediator) ব্যবহার করে তাদের মধ্যে যোগাযোগ প্রতিষ্ঠা করে। এর মাধ্যমে, একাধিক অবজেক্টের মধ্যে যোগাযোগের জন্য একটি একক কম্পোনেন্টের মাধ্যমে বার্তা প্রেরণ করা হয়, যাতে কমপ্লেক্সিটি কমে এবং কোডের ডিপেনডেন্সি সহজ হয়।

Mediator Pattern ব্যবহৃত হয় যখন একাধিক অবজেক্ট একে অপরের সাথে সরাসরি যোগাযোগ করে, যা কোডের অপ্রত্যাশিত জটিলতা সৃষ্টি করে, এবং এটি একটি মধ্যস্থতাকারী অবজেক্টের মাধ্যমে যোগাযোগকে সহজ করে তোলে।

এটি বিশেষত UI Components বা ViewModel এবং Model এর মধ্যে যোগাযোগে কাজে আসে যেখানে ViewModel এর কম্পোনেন্টগুলি একে অপরের সাথে সরাসরি যোগাযোগ না করে, বরং একটি Mediator বা Messenger অবজেক্টের মাধ্যমে বার্তা আদান-প্রদান করে।


Mediator Pattern এর উদ্দেশ্য

Mediator Pattern এর মূল উদ্দেশ্য হলো কোডের জটিলতা কমানো এবং নির্দিষ্ট কম্পোনেন্টগুলোর মধ্যে সরাসরি যোগাযোগ এড়ানো। যখন একাধিক কম্পোনেন্ট বা ক্লাসের মধ্যে যোগাযোগ খুব বেশি জটিল হয়ে যায়, তখন এই প্যাটার্ন ব্যবহার করা হয়। এর মাধ্যমে, সমস্ত কম্পোনেন্টকে একটি একক কেন্দ্রীক স্থানে, অর্থাৎ Mediator-এ বার্তা পাঠানোর জন্য নির্দিষ্ট করা হয়।

Mediator বা Messenger অ্যাপ্লিকেশন আর্কিটেকচারে সাহায্য করে:

  • Loose coupling তৈরি করতে, যেখানে ক্লাসগুলোর মধ্যে সরাসরি নির্ভরতাগুলি কমিয়ে দেয়া হয়।
  • একাধিক UI Components এর মধ্যে যোগাযোগ প্রতিষ্ঠিত হয় কিন্তু তাদের মধ্যে সরাসরি সম্পর্ক না রেখে।
  • কম্পোনেন্টগুলির একে অপরের উপর নির্ভরতাকে কেন্দ্রীয়ভাবে পরিচালনা করা হয়।

Mediator Pattern এর মূল উপাদান

Mediator Pattern তে তিনটি প্রধান উপাদান থাকে:

  1. Mediator (Messenger): এটি মধ্যস্থতাকারী অবজেক্ট যা সব কম্পোনেন্টের মধ্যে বার্তা আদান-প্রদান পরিচালনা করে।
  2. Colleagues (Components): এগুলি সেই অবজেক্ট বা কম্পোনেন্ট যা Mediator এর মাধ্যমে একে অপরের সাথে যোগাযোগ করে।
  3. Communication (Message): এই বার্তা, যা এক কম্পোনেন্ট থেকে আরেকটি কম্পোনেন্টে পৌঁছায়, Mediator এর মাধ্যমে প্রেরিত হয়।

Mediator Pattern এর উদাহরণ

ধরা যাক, একটি Chat Application আছে যেখানে কয়েকজন ব্যবহারকারী বিভিন্ন কক্ষে (rooms) বার্তা পাঠাচ্ছে। এখানে, ব্যবহারকারীদের মধ্যে সরাসরি বার্তা পাঠানোর পরিবর্তে, Messenger বা Mediator প্যাটার্ন ব্যবহার করা হবে।

1. Mediator Interface

public interface IMediator
{
    void SendMessage(string message, IColleague colleague);
}

2. Colleague Interface

public interface IColleague
{
    void ReceiveMessage(string message);
    void SetMediator(IMediator mediator);
}

3. Concrete Mediator

public class ChatRoomMediator : IMediator
{
    private List<IColleague> colleagues;

    public ChatRoomMediator()
    {
        colleagues = new List<IColleague>();
    }

    public void AddColleague(IColleague colleague)
    {
        colleagues.Add(colleague);
        colleague.SetMediator(this);
    }

    public void SendMessage(string message, IColleague colleague)
    {
        foreach (var c in colleagues)
        {
            // বার্তা পাঠানোর জন্য, তবে পাঠানো কম্পোনেন্ট নিজে সেই বার্তা পাবে না
            if (c != colleague)
            {
                c.ReceiveMessage(message);
            }
        }
    }
}

4. Concrete Colleagues

public class User : IColleague
{
    public string Name { get; private set; }
    private IMediator mediator;

    public User(string name)
    {
        Name = name;
    }

    public void SetMediator(IMediator mediator)
    {
        this.mediator = mediator;
    }

    public void SendMessage(string message)
    {
        Console.WriteLine($"{Name} sends: {message}");
        mediator.SendMessage(message, this);
    }

    public void ReceiveMessage(string message)
    {
        Console.WriteLine($"{Name} receives: {message}");
    }
}

5. ব্যবহার

class Program
{
    static void Main()
    {
        ChatRoomMediator mediator = new ChatRoomMediator();

        IColleague user1 = new User("John");
        IColleague user2 = new User("Jane");

        mediator.AddColleague(user1);
        mediator.AddColleague(user2);

        user1.SendMessage("Hello, how are you?");
        user2.SendMessage("I'm good, thank you!");
    }
}

আউটপুট:

John sends: Hello, how are you?
Jane receives: Hello, how are you?
Jane sends: I'm good, thank you!
John receives: I'm good, thank you!

এখানে, John এবং Jane সরাসরি একে অপরকে বার্তা পাঠাচ্ছে না, বরং ChatRoomMediator এর মাধ্যমে বার্তাগুলি প্রেরিত হচ্ছে।


Messenger Pattern in MVVM

MVVM প্যাটার্নে, Messenger Pattern বা Mediator Pattern একটি গুরুত্বপূর্ণ ভূমিকা পালন করতে পারে, বিশেষত ViewModel গুলির মধ্যে যোগাযোগ প্রতিষ্ঠার জন্য। যখন একাধিক ViewModel একে অপরের সাথে যোগাযোগ করতে চায়, কিন্তু তাদের মধ্যে সরাসরি সম্পর্ক রাখা উচিত নয়, তখন একটি Messenger ক্লাস ব্যবহার করা হয় যা বার্তা পাঠায়।

Messenger Pattern উদাহরণ:

public class Messenger
{
    private static Dictionary<string, Action<string>> _recipients = new Dictionary<string, Action<string>>();

    public static void Register(string recipient, Action<string> callback)
    {
        _recipients[recipient] = callback;
    }

    public static void Send(string recipient, string message)
    {
        if (_recipients.ContainsKey(recipient))
        {
            _recipients[recipient](message);
        }
    }
}

এখানে, Messenger একটি স্ট্যাটিক ক্লাস যা বার্তা পাঠানোর এবং গ্রহণের কাজটি পরিচালনা করে।

2. Usage in ViewModel

public class SenderViewModel
{
    public void SendMessage()
    {
        Messenger.Send("Receiver", "Hello from Sender!");
    }
}

public class ReceiverViewModel
{
    public ReceiverViewModel()
    {
        Messenger.Register("Receiver", ReceiveMessage);
    }

    private void ReceiveMessage(string message)
    {
        Console.WriteLine($"Receiver received: {message}");
    }
}

এখানে SenderViewModel বার্তা প্রেরণ করবে এবং ReceiverViewModel সেই বার্তা গ্রহণ করবে। Messenger প্যাটার্ন ViewModel গুলির মধ্যে সরাসরি যোগাযোগ ছাড়াই বার্তা প্রেরণ ও গ্রহণ করে।


Mediator Pattern এর সুবিধা

  • Loosely Coupled: কম্পোনেন্টগুলির মধ্যে সরাসরি যোগাযোগ এড়ানো হয়, ফলে কোড আরও রিইউজেবল এবং মেইনটেইনেবল হয়।
  • Centralized Communication: সমস্ত যোগাযোগ এক জায়গায় কেন্দ্রীভূত করা হয়, তাই ব্যবস্থাপনা সহজ হয়।
  • Flexibility: নতুন কম্পোনেন্ট যোগ করা সহজ হয়, কারণ সরাসরি অন্যান্য কম্পোনেন্টগুলির সাথে যোগাযোগ করতে হয় না।

Mediator বা Messenger Pattern একটি অত্যন্ত কার্যকর ডিজাইন প্যাটার্ন যা MVVM বা অন্যান্য আর্কিটেকচারে ব্যবহার করা হয় যখন একাধিক কম্পোনেন্টের মধ্যে যোগাযোগ হতে হয় তবে তাদের সরাসরি সম্পর্ক রাখা উচিত নয়। এটি কোডের জটিলতা কমায় এবং ব্যবস্থাপনা সহজ করে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion